package main

import "fmt"

// 定义一个自己的错误
type myDiyError struct {
	code int
	msg  string
}

// 实现错误类的方法
func (e myDiyError) Error() string {
	return fmt.Sprint("错误信息：", e.msg, "状态码：", e.code)
}

// 模拟一个错误  返回 类的数值和错误
func test(i int) (int, error) {
	if i != 0 {
		return i, &myDiyError{
			code: 500,
			msg:  "非0数据",
		}
	}
	//如果输入的数不是0
	return 0, nil
}

func main() {
	i, err := test(1)
	if err != nil {
		fmt.Println(err)
		//断言 看还不是返回的子集设计的错误
		myerr, ok := err.(*myDiyError)
		//如果是  输出信息
		if ok {
			fmt.Println(myerr.msg)
			fmt.Println(myerr.code)
		}
	}
	//返回输入的数值
	fmt.Println(i)

}
